/*
 * Lớp điều khiển database
 */
package dao;

import bean.GioHang;
import bean.MonHang;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author Windsea
 */
public class ControllerDB {

    private Connection con;


    /**
     * Phương thức tạo kết nối Database
     */
    public ControllerDB() {
        try {
            con = ConnectDB.createMySQLconnection("banhang");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Phương thức checklogin sử dụng PrepareStatement
     *
     * @param username
     * @param password
     * @return
     * @throws SQLException
     */
    public boolean checkLogin(String username, String password) throws SQLException {
        String sql = "SELECT * FROM user_cus WHERE username = ? AND password = ?";        // Kiểu PrepareStatement
        try {
            PreparedStatement prestmt = con.prepareStatement(sql);
            // gán String 1 = username : 2 = password
            prestmt.setString(1, username);
            prestmt.setString(2, password);

            ResultSet rs = prestmt.executeQuery();

            if (rs.next()) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;

    }

    /**
     * Phương thức thêm món hàng vào giỏ
     *
     * @param cart
     * @param id_pro
     * @param qtyOrdered
     */
    public void addCartItem(GioHang cart, int id_pro, int qtyOrdered) {
        try {
            Statement stmt = con.createStatement();

            String sql = "SELECT * FROM product WHERE id='" + id_pro + "'";

            ResultSet rs = stmt.executeQuery(sql);

            if (rs.next()) {
                int id = Integer.parseInt(rs.getString("id"));
                String name = rs.getString("name");
                String type = rs.getString("type");
                String provider = rs.getString("provider");
                int price = Integer.parseInt(rs.getString("price"));
                // Đóng gói đối tượng item
                cart.add(id, name, type, provider, price, qtyOrdered);
            }
        } catch (Exception e) {
        }
    }

    /**
     * Phương thức lấy thông tin khách hàng
     *
     * @param custUname username khách hàng
     * @return
     */
    public ResultSet getCustommerInfo(String custUname) {
        ResultSet rs = null;
        try {
            Statement stmt = con.createStatement();
            String sql = "SELECT * FROM user_cus WHERE username='" + custUname + "'";
            rs = stmt.executeQuery(sql);
        } catch (Exception e) {
        }
        return rs;
    }

    /**
     * Phương thức cập nhật số lượng mặt hàng ở bảng product
     *
     * @param qtyOrdered số lượng mặt hàng khách hàng đã mua
     * @param id mã số mặt hàng trong bảng product
     * @return trả vể resultset
     */
    public void quantityUpdate(int qtyOrdered, int id) {
        try {
            Statement stmt = con.createStatement();
            String sql = "UPDATE product SET quantity = quantity - " + qtyOrdered + " WHERE id = " + id;
            stmt.executeUpdate(sql);
        } catch (Exception e) {
        }
    }

    /**
     * Phương thức lưu hóa đơn
     *
     * @param id_cus id khách hàng
     * @param id id product
     * @param qtyOrdered số lượng đặt mua từng món hàng
     * @param price giá món hàng
     * @return
     */
    public void insertBill(int id_cus, int id, int qtyOrdered, int price, int id_order) {
        /**
         * Lấy thời gian
         */
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

        //lấy thời gian hiện tại
        Date _date = new Date();
        //Trạng thái
        String state = "chưa giao hàng";
        try {
            Statement stmt = con.createStatement();

            String sql = "INSERT INTO bill values ("
                    + id_cus + ", " + id + ", '" + qtyOrdered + "', '"
                    + price + "', '" + dateFormat.format(_date) + "', '" + state + "','" + id_order + "')";
            stmt.executeUpdate(sql);
        } catch (Exception e) {
        }
    }

    public int getLastOrder() {
        int id = 0;
        ResultSet rs = null;
        try {
            Statement stmt = con.createStatement();
            String sql = "SELECT MAX(ID) FROM bill";
            rs = stmt.executeQuery(sql);
            while(rs.next()){
            id = rs.getInt(1);
            }
        } catch (Exception e) {
        }
        return id;
    }

    /**
     * Phương thức lấy thông tin khách hàng
     *
     * @return
     */
    public ResultSet getUser() {
        ResultSet rs = null;
        try {
            Statement stmt = con.createStatement();
            String sql = "SELECT username FROM user_cus";
            rs = stmt.executeQuery(sql);
        } catch (Exception e) {
        }
        return rs;
    }
}
